import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '@/style/login.css';
import '@/style/student.css';
import axios from 'axios'

// 配置后端的访问地址
axios.defaults.baseURL = 'http://localhost:8080/'

Vue.use(ElementUI);
Vue.config.productionTip = false
Vue.prototype.$axios = axios

// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token，对请求参数统一加密
axios.interceptors.request.use(config => {
  config.headers['Content-Type'] = 'application/json;charset=utf-8';

    // 获取 token
 // config.headers.Authorization =window.localStorage.getItem("token");
  config.headers['token']=window.localStorage.getItem("token");
  //config.headers.authorization = token //请求头加上token

  return config
}, error => {
  return Promise.reject(error)
});

// // response 拦截器
// // 可以在接口响应后统一处理结果
// axios.interceptors.response.use(
//   response => {
//     let res = response.data;
//     console.log(res)
//     // 如果是返回的文件
//     if (response.config.responseType === 'blob') {
//       return res
//     }
//     // 兼容服务端返回的字符串数据
//     if (typeof res === 'string') {
//       res = res ? JSON.parse(res) : res
//     }
//     return res;
//   },
//   error => {
//     console.log('err' + error) // for debug
//     return Promise.reject(error)
//   }
// )


// response 拦截器
axios.interceptors.response.use(
  response => {


    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (response.status === 200) {
      return Promise.resolve(response)
    } else {
      return Promise.reject(response)
    }
  },
  // 服务器状态码不是2开头的情况
  // 这里可以跟你们的后台开发人员协商好统一的错误状态码
  // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          router.replace({
            path: '/login',
            query: {
              redirect: router.currentRoute.fullPath
            }
          })
          break

        // 403 token过期
        // 登录过期对用户进行提示
        // 清除本地token和清空vuex中token对象
        // 跳转登录页面
        case 403:
          Toast({
            message: '登录过期，请重新登录',
            duration: 1000,
            forbidClick: true
          })
          // 清除token
          localStorage.removeItem('token')
          store.commit('loginSuccess', null)
          // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
          setTimeout(() => {
            router.replace({
              path: '/login',
              query: {
                redirect: router.currentRoute.fullPath
              }
            })
          }, 1000)
          break

        // 404请求不存在
        case 404:
          Toast({
            message: '网络请求不存在',
            duration: 1500,
            forbidClick: true
          })
          break
        // 其他错误，直接抛出错误提示
        default:
          Toast({
            message: error.response.data.message,
            duration: 1500,
            forbidClick: true
          })
      }
      return Promise.reject(error.response)
    }
  }
)
new Vue({
  router,
  render: function (h) { return h(App) }
}).$mount('#app')